package org.ccay.core.dispatcher;

import org.ccay.core.exception.ApplicationException;

/**
 * 
 * 事件处理器接口，具体的事件接口需要扩展此接口，实现此类可以定义事件契约。
 * 
 * 自定义事件处理需要三个步骤
 * <p/>
 * 1、实现 IEventArgs 接口 ，作为事件参数类
 * <br/>
 * 2、扩展 IEventHandler 接口，作为事件处理器的接口
 * <br/>
 * 3、实现2步骤中扩展的IEventHandler的接口，作为事件触发时的处理程序
 * <br/>
 * 4、使用 EventUtil.dispatch() 触发事件
 * 
 * <p/>
 * 扩展 IEventHandler 的示例：
 * <pre>
 * <code>
 * public interface IEventHandler1 extends IEventHandler<EventArgs1> { 
 * 	public void execute(Object sender, EventArgs1 args) throws org.ccay.core.exception.ApplicationException;
 * }
 * </code>
 * </pre>
 * <p/>
 * 实现上面的IEventHandler1:
 * <pre>
 * <code>
 * &#064;Named
 * public class EventHandler1A implements IEventHandler1 {
 * 	private static final ILogger log = CcayLoggerFactory.getLogger(EventHandler1A.class);
 * 	public void execute(Object sender, EventArgs1 args) throws ApplicationException {
 * 		log.debug("executing:" + args.getMessage());		
 * 	} 
 * } 
 * </code>
 * </pre>
 * 
 * 
 * @since 2011-9-21
 * @param <TA> IEventArgs 的实现类，参考示例
 */
public interface IEventHandler<TA extends IEventArgs> {
	/**
	 * 事件发生时执行的方法
	 * @param sender 事件发送者
	 * @param args 事件参数
	 * @throws ApplicationException 事件处理不正确时抛出的异常
	 */
	public void execute(Object sender, TA args) throws ApplicationException;

}